﻿using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using BaseLinQ.DataContex;
using Core;
using DevExpress.Web.ASPxGridView;
using Module;
using RBAC;
using Solution.AppCode;

namespace Solutions.Admin.QuanLyQuyen
{
    public partial class QuanLyQuyen1 : System.Web.UI.UserControl
    {
        protected void Page_Load(object sender, EventArgs e)
        {

            if (!IsPostBack)
            {
                LoadGrid();
                loadCheckLisṭ̣();
                LoadCboTaiNguyen();
                BindCboMenuParent(0);
            }
            if (grdTest.IsCallback)
            {
                LoadGrid();

            }
        }

        public void BindCboMenuParent(long _lngMenuID)
        {
            //Load tree parent menu
            MenuLogic logic = new MenuLogic();
            List<tbl_Menu> lstMenu = logic.GetTreeMenuForCbo(_lngMenuID);
            if (lstMenu != null && lstMenu.Count > 0)
            {
                cbomneu.DataSource = lstMenu;
                cbomneu.DataBind();
            }

            lstMenu = null;
            logic = null;
        }

        public void loadCheckLisṭ̣()
        {
            DataTable table = new DataTable();
            table.Columns.Add("id", typeof (int));
            table.Columns.Add("name", typeof (string));

            //
            // Here we add five DataRows.
            //
            table.Rows.Add(1, "Xem");
            table.Rows.Add(2, "Thêm");
            table.Rows.Add(3, "Sửa");
            table.Rows.Add(4, "Xóa");
            checkboxcha.DataSource = table;
            checkboxcha.DataBind();
            radibutomcha.DataSource = table;
            radibutomcha.DataBind();
        }

        public void LoadCboTaiNguyen()
        {
            TaiNguyenLogic logic = new TaiNguyenLogic();
            List<tbl_TaiNguyen> lstTaiNguyen = logic.GetList();
            cbotainguyen.DataSource = lstTaiNguyen;
            cbotainguyen.DataBind();
            logic = null;
        }

        protected void LoadGrid()
        {
            DataSet dts = null;
            DataTable dt = null;
            QuyenLogic Pqlgic = new QuyenLogic();
            dt = Pqlgic.GetListPaging(0, "pk_iQuyenID", "DESC", 10, "");
            grdTest.DataSource = dt;
            grdTest.DataBind();

        }

        public void grdTest_RowCommand(object sender, ASPxGridViewRowCommandEventArgs e)
        {
            int id = Convert.ToInt32(e.KeyValue);
            switch (e.CommandArgs.CommandName)
            {
                case "Edit":
                    // ASPxPopupControl1.ShowOnPageLoad = true;
                    // ScriptManager.RegisterStartupScript(this, this.GetType(), "Thông báo", "alert('Bạn chưa nhập số di động! " + id + "');", true);
                    radibutomcha.Visible = true;
                    checkboxcha.Visible = false;
                    btnLuuLai.Visible = false;
                    btcapnhat.Visible = true;
                    LoadFromByID(id);
                    wdsQuanLyPhanQuyen.ShowOnPageLoad = true;
                    Session.Add("Id", id);
                    break;
                case "Delete":
                    QuyenLogic qlg = new QuyenLogic();
                     string _conn = ConfigurationSettings.AppSettings["ConnectString"];
                 RBACDataContext   db = new RBACDataContext(_conn);
                    tbl_QuyenVaiTro objQuyenVaiTro = (from m in db.tbl_QuyenVaiTros
                                                      where m.fk_iQuyenID == id
                                                      select m).FirstOrDefault<tbl_QuyenVaiTro>();
                    if (objQuyenVaiTro != null)
                    {
                        Tools.Message(this.Page,"Không thể xóa vì quyền được sử dụng trong Phân quyền người dùng!");
                        return;
                    }
                    
                    else if (qlg.Delete(id))
                    {
                        Tools.Message(this.Page,"Xóa thành công!");
                        LoadGrid();
                    }
                    else
                    {
                        Tools.Message(this.Page,"Xóa thất bại!");
                    }
                    break;
            }
        }
        protected  void bt_donglai(object sender, EventArgs e)
        {
            ResetForm();
        }
        protected void bt_themmoi(object sender, EventArgs e)
        {
            checkboxcha.Visible = true; 
            btcapnhat.Visible = false;
            btnLuuLai.Visible = true;
            radibutomcha.Visible = false;
            wdsQuanLyPhanQuyen.ShowOnPageLoad = true;
        }

        protected void GetCheckedActionEdit(ref tbl_Quyen _objQuyen)
        {
            for (int i = 0; i < radibutomcha.Items.Count; i++)
            {
                if (radibutomcha.Items[i].Selected == true)
                {
                    if (radibutomcha.Items[i].Value.ToString() == "1")
                    {
                        _objQuyen.bXem = true;
                    }
                    else
                    {
                            _objQuyen.bXem = false;
                    }
                    if (radibutomcha.Items[i].Value.ToString() == "2")
                    {
                        _objQuyen.bThem = true;
                    }
                    else
                    {
                            _objQuyen.bThem = false;
                        
                    }


                    if (radibutomcha.Items[i].Value.ToString() == "3")
                    {
                        _objQuyen.bSua = true;
                    }
                    else
                    {
                            _objQuyen.bSua = false;
                        
                    }


                    if (radibutomcha.Items[i].Value.ToString() == "4")
                    {
                        _objQuyen.bXoa = true;

                    }
                    else
                    {
                            _objQuyen.bXoa = false;
                        
                    }
                }
            }
        }
    protected  void CapNhat_Click(object sender, EventArgs e)
        {
             QuyenLogic logic = new QuyenLogic();
            tbl_Quyen objQuyen = GetObjectFromForm();
            objQuyen.fk_iNguoiCapNhatID = Utils.GetUserId();
            GetCheckedActionEdit(ref objQuyen);
            int intQuyenID = int.Parse("0" + Session["Id"].ToString());
            objQuyen.pk_iQuyenID = intQuyenID;
            if (!logic.CheckMenuCon(objQuyen.fk_iMenuID.ToString()))
            {
                Tools.Message(this.Page,"Chỉ được chọn menu lá");
                return;
            }
            //Kiểm tra đã tồn tại
            if (logic.CheckExist(objQuyen))
            {
                Tools.Message(this.Page,"Mã quyền hoặc vai trò của quyền đã tồn tại!");
                return;
            }
            else
            {
                try
                {
                    if (logic.Update(objQuyen))
                    {
                        Tools.Message(this.Page,"Cập nhật thành công!");
                       LoadGrid();
                    }
                    else
                    {
                        Tools.Message(this.Page,"Cập nhật thất bại!");
                    }
                }
                catch (Exception ex)
                {
                  
                    Tools.Message(this.Page,"Cập nhật thất bại!");
                }
            }
            wdsQuanLyPhanQuyen.ShowOnPageLoad = false;
            logic = null;
        }
        
        protected void LuuLai_Click(object sender, EventArgs e)
        {
            QuyenLogic logic = new QuyenLogic();
            if (txtmaquyen.Text == "")
            {
                ScriptManager.RegisterStartupScript(this, this.GetType(), "Thông báo", "alert('Mã quyền không được để trống!');", true);
                wdsQuanLyPhanQuyen.ShowOnPageLoad = true;
                txtmaquyen.Focus();
                return;
            }
            if (txttenquyen.Text == "")
            {
                ScriptManager.RegisterStartupScript(this, this.GetType(), "Thông báo", "alert('Tên quyền không được để trống!');", true);
                wdsQuanLyPhanQuyen.ShowOnPageLoad = true;
                txttenquyen.Focus();
                return;
            }
            if (cbotainguyen.Text == "")
            {
                ScriptManager.RegisterStartupScript(this, this.GetType(), "Thông báo", "alert('Bạn chưa chọn tài nguyên!');", true);
                wdsQuanLyPhanQuyen.ShowOnPageLoad = true;
                cbotainguyen.Focus();
                return;
            }
            if (cbomneu.Text == "")
            {
                ScriptManager.RegisterStartupScript(this, this.GetType(), "Thông báo", "alert('Bạn chưa chọn menu!');", true);
                wdsQuanLyPhanQuyen.ShowOnPageLoad = true;
                cbomneu.Focus();
                return;
            }
            tbl_Quyen objQuyen = GetObjectFromForm();
            objQuyen.bKichHoat = true;
            objQuyen.fk_iNguoiTaoID = Utils.GetUserId();
            objQuyen.fk_iNguoiCapNhatID = Utils.GetUserId();
            if (!logic.CheckMenuCon(objQuyen.fk_iMenuID.ToString()))
            {
                Tools.Message(this.Page,"Chỉ được chọn menu lá");
                return;
            }
            // sửa store sp_Quyen_Select xóa dòng if start>0
            if (logic.Insert(objQuyen))
            {
                Tools.Message(this.Page,"Thêm thành công!");
                //frmInfor.Reset();
                txtmaquyen.Focus();
                LoadGrid();
                ResetForm();
                //windowAsk.Hidden = false;
            }
            else
            {
                Tools.Message(this.Page,"Mã quyền hoặc vai trò của quyền đã tồn tại!");
                txtmaquyen.Focus();
            }
            logic = null;
            wdsQuanLyPhanQuyen.ShowOnPageLoad = false;
        }
        protected  void ResetForm()
        {
            txtmaquyen.Text = "";
            txttenquyen.Text = "";
            cbomneu.Text = "";
            cbomneu.Value = "";
            cbotainguyen.Text = "";
            cbotainguyen.Value = "";
            for (int i = 0; i <checkboxcha.Items.Count; i++)
            {
                checkboxcha.Items[i].Selected = false;
            }
        }
        public void LoadFromByID(int _intQuyenID)
        {
            QuyenLogic logic = new QuyenLogic();
            tbl_Quyen objQuyen = logic.GetByID(_intQuyenID);
            if (objQuyen != null && objQuyen.pk_iQuyenID > 0)
            {
                txtmaquyen.Text = objQuyen.sMaQuyen;
                txttenquyen.Text = objQuyen.sTenQuyen;
                cbotainguyen.Text = objQuyen.fk_iTaiNguyenID + "";
                cbomneu.Text = objQuyen.fk_iMenuID + "";
                SetCheckedAction(objQuyen);
            }
            logic = null;
        }
        public void SetCheckedAction(tbl_Quyen _objQuyen)
        {
                for (int i = 0; i < radibutomcha.Items.Count; i++)
                {
                    if (_objQuyen.bXem == true)
                    {
                        if (radibutomcha.Items[i].Value.ToString() == "1")
                        {
                            radibutomcha.Items[i].Selected = true;
                        }
                    }
                    if (_objQuyen.bThem == true)
                    {
                        if (radibutomcha.Items[i].Value.ToString() == "2")
                        {
                            radibutomcha.Items[i].Selected = true;
                        }
                    }
                    if (_objQuyen.bSua == true)
                    {
                        if (radibutomcha.Items[i].Value.ToString() == "3")
                        {
                            radibutomcha.Items[i].Selected = true;
                        }
                    }
                    if (_objQuyen.bXoa == true)
                    {
                        if (radibutomcha.Items[i].Value.ToString() == "4")
                        {
                            radibutomcha.Items[i].Selected = true;
                        }
                    }
                }
            
        
        }
        public tbl_Quyen GetObjectFromForm()
        {
        
            tbl_Quyen objRes = new tbl_Quyen();
            objRes.sMaQuyen = txtmaquyen.Text;
            objRes.sTenQuyen = txttenquyen.Text;
            objRes.fk_iTaiNguyenID = Convert.ToInt32(cbotainguyen.Value);
            objRes.fk_iMenuID = Convert.ToInt32(cbomneu.Value);
            objRes.fk_iNguoiCapNhatID = Utils.GetUserId();
            GetCheckedAction(ref objRes);
            return objRes;
        }
        public tbl_Quyen GetObjectFromForm_Edit()
        {
            tbl_Quyen objRes = new tbl_Quyen();
            objRes.sMaQuyen = txtmaquyen.Text;
            objRes.sTenQuyen = txttenquyen.Text;
            objRes.fk_iTaiNguyenID = Convert.ToInt32(cbotainguyen.Value);
            objRes.fk_iMenuID = Convert.ToInt32(cbomneu.Value);
            objRes.fk_iNguoiCapNhatID = Utils.GetUserId();
            GetCheckedAction(ref objRes);
            return objRes;
        }
       
        public void GetCheckedAction(ref tbl_Quyen _objQuyen)
        {
            for (int i = 0; i < checkboxcha.Items.Count; i++)
            {
                if (checkboxcha.Items[i].Selected == true)
                {
                    if (_objQuyen.bXem == null || _objQuyen.bXem == false)
                    {
                        if (checkboxcha.Items[i].Value.ToString() == "1")
                        {
                            _objQuyen.bXem = true;
                        }
                        else
                        {
                            if (_objQuyen.bXem != true)
                            {
                                _objQuyen.bXem = false;
                            }

                        }
                    }
                    if (_objQuyen.bThem == null || _objQuyen.bThem == false)
                    {
                        if (checkboxcha.Items[i].Value.ToString() == "2")
                        {
                            _objQuyen.bThem = true;
                        }
                        else
                        {
                            if (_objQuyen.bThem != true)
                            {
                                _objQuyen.bThem = false;
                            }
                        }
                    }
                    if (_objQuyen.bSua == null || _objQuyen.bSua == false)
                    {
                        if (checkboxcha.Items[i].Value.ToString() == "3")
                        {
                            _objQuyen.bSua = true;
                        }
                        else
                        {
                            if (_objQuyen.bSua != true)
                            {
                                _objQuyen.bSua = false;
                            }
                        }
                    }
                    if (_objQuyen.bXoa == null || _objQuyen.bXoa == false)
                    {
                        if (checkboxcha.Items[i].Value.ToString() == "4")
                        {
                            _objQuyen.bXoa = true;

                        }
                        else
                        {
                            if (_objQuyen.bXoa != true)
                            {
                                _objQuyen.bXoa = false;
                            }
                        }
                    }
                }
            }
        }
    }
}